package javaClassExercise.designPatterns.adapterModel.interfaceAdapter;

/**
 * Created by lomo.
 *
 *
 */
public class InterfaceAdapterTest {

    public static void main(String[] args) {
        Sourceable sourceable = new WrapperRealize1();
        Sourceable sourceable1 = new WrapperRealize2();

        sourceable.method1();
        System.out.println(sourceable.getClass());
        //class javaClassExercise.designPatterns.adapterModel.interfaceAdapter.WrapperRealize1
        System.out.println(sourceable.hashCode());
        //322543836
        System.out.println(sourceable.getClass().hashCode());
        //1093729019
        sourceable1.method2();

        WrapperRealize1 wap1 = new WrapperRealize1();
        wap1.method1(); //WrapperRealize1类实现方法--method1()
        System.out.println(wap1.getClass());
        //class javaClassExercise.designPatterns.adapterModel.interfaceAdapter.WrapperRealize1
        System.out.println(wap1.hashCode());
        //1991087660
        System.out.println(wap1.getClass().hashCode());
        //1093729019

        System.out.println(sourceable.equals(wap1)); //false, 说明两个对象是不一样的！！如果为TRUE，则hashCode也必然相同
        Sourceable sourceable2 = new WrapperRealize1();
        System.out.println(sourceable.equals(sourceable2)); //false
        System.out.println(sourceable == wap1); //false
        System.out.println(sourceable == sourceable2); //false

        //无论是对象sourceable还是wap1对象，其实都是WrapperRealize1类的类对象，虽然声明时看起来不太一样
        //WrapperRealize1类继承自Wrapper类，而Wrapper类实现了Sourceable这个类接口，可以理解为Wrapper继承的是这个接口
        //从而使得这2中方式new得到的对象是一样的，都是从具体方法实现类new出来的对象
        //每次run时 这2个对象的hashCode值是一样的，
        // 两个类变量的hashCode值不一样，
        // getClass().hashCode()值相同：说明他们指向的是同一个对象，第二次创建这个类的对此时发现内存已经存在，
        // 所以不会创建一个全新的，只是将第二个变量指向第一个。
        // 实际 只是引用的变量名不一样！

        //getClass()获取的是当前对象的类型类，表示当前的对象属于什么类型的类.



    }
}
